package com.yupi.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yupi.model.domain.Userinfo;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @author 木兔光太郎
 * @description 针对表【userinfo(用户信息)】的数据库操作Service
 * @createDate 2024-07-29 13:50:37
 */
public interface UserinfoService extends IService<Userinfo> {

    /**
     * 登录逻辑
     *
     * @param userAccount  账号
     * @param userPassword 密码
     * @return 返回用户信息
     */
    Userinfo userLogin(String userAccount, String userPassword, HttpServletRequest request);

    /**
     * 用户注册功能
     *
     * @param userAccount   账号
     * @param userPassword  密码
     * @param checkPassword 确认密码
     * @return 返回新用户的id
     */
    long userRegister(String userAccount, String userPassword, String checkPassword, String planetCode);

    /**
     * 用户注销功能
     *
     * @return
     */
    int userLogout(HttpServletRequest request);

    /**
     * 脱敏用户
     *
     * @param userinfo
     * @return
     */
    //用户脱敏方法
    Userinfo getSafetyUser(Userinfo userinfo);

    //根据标签查询用户
    List<Userinfo> searchUserByTags(List<String> tags);

    /**
     * 修改用户信息
     *
     * @param userinfo
     * @param loginUser
     * @return
     */
    Integer updateUser(Userinfo userinfo, Userinfo loginUser);

    /**
     * 获取当前登录用户
     *
     * @param request
     * @return
     */
    Userinfo getLoginUser(HttpServletRequest request);

    //判断是否为管理员方法
    boolean isAdmin(HttpServletRequest request);

    //判断是否为管理员方法
    boolean isAdmin(Userinfo loginUser);

    /**
     * 分页推荐用户
     *
     * @param pageNum
     * @param pageSize
     * @param request
     * @return
     */
    Page<Userinfo> recommendUsers(long pageNum, long pageSize, HttpServletRequest request);

    /**
     * 匹配用户
     *
     * @param num
     * @param loginUser
     * @return
     */
    List<Userinfo> matchUsers(long num, Userinfo loginUser);
}
